﻿using System;
using System.Collections.Generic;
//using Crosland.Automotriz.Core;
//using Crosland.Sami.Logic;
//using Crosland.Sami.Core;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.Business;

namespace Crosland.Automotriz.Logic
{
    /// <summary>
    /// Clase que controla la logica de seguridad de la aplicacion
    /// </summary>
    public class SeguridadLogic
    {


        /// <summary>
        /// Valida si el usuario se encuentra registrado y tiene permisos
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <param name="empresaId"></param>
        /// <returns></returns>
        public string ValidarUsuario(string userName, string password)
        {

            T_SEG_USUARIO usuario = new clsUsuarioLogic().listarUser(userName)[0];

            if (usuario != null)
            {
                if (usuario.IND_ESTADO == "A")
                {
                    if (password == new clsUsuarioLogic().DesEncriptarUser(usuario.DES_PASSWORD))
                    {
                        return "OK";
                    }
                    else
                    {
                        return "seg_pws_incorrecto";
                    }
                }
                else
                {
                    return "seg_user_noactivo";
                }
            }
            else
            {
                return "seg_user_noexiste";
            }
        }


        //public string DesEncriptar(string password)
        //{
        //    return clsUsuarioLogic().DesEncriptarUser(password);
        //}

        //public string EncriptarPassword(string password)
        //{
        //    return Factory.GetUsuarioDao().EncriptarPasswordUser(password);
        //}

        public List<T_SEG_OPCION> ListarOpciones()
        {
            return new clsOpcionLogic().listarTreaview();
        }

        public T_SEG_OPCION ObtenerOpcion(int idOpcion)
        {
            return new clsOpcionLogic().ObtenerOpciones(idOpcion);
        }







        //public int GrabarOpcion(OPCION entity)
        //{
        //    try
        //    {
        //        int resultado = 0;
        //        if (entity.ID_OPCION == 0)
        //        {
        //            resultado = Factory.GetOpcionDao().Save(entity);
        //        }
        //        else
        //        {
        //            entity.USR_ACTUALIZO = entity.USR_CREACION;
        //            Factory.GetOpcionDao().Modificar(entity);
        //            resultado = entity.ID_OPCION;
        //        }
        //        return resultado;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
       

        //public void EliminarOpcion(int idOpcion)
        //{
        //    try
        //    {
        //        Factory.GetOpcionDao().Eliminar(new OPCION() { ID_OPCION = idOpcion });
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}

        public List<VW_OPCION> ListarOpcionPorPadre(string userName, int idPadre)
        {
            return Factory.GetOpcionDao().ObtenerPorUsuario(userName, idPadre);
        }


        //public List<GRUPO> BuscarGrupos(string nombre)
        //{
        //    return Factory.GetGrupoDao().GetByCriteria(nombre);
        //}

        //public GRUPO ObtenerGrupo(int idGrupo)
        //{
        //    return Factory.GetGrupoDao().GetById(idGrupo);
        }




        //public void EliminarGrupo(int idGrupo, string idUsuario)
        //{
        //    try
        //    {
        //        GRUPO entity = Factory.GetGrupoDao().GetById(idGrupo);
        //        entity.USR_ACTUALIZO = idUsuario;
        //        entity.IND_ESTADO = Estados.Eliminado;
        //        Factory.GetGrupoDao().Modificar(entity);
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}

        //public int GrabarGrupo(GRUPO entity, List<int> listOpciones)
        //{
        //    try
        //    {
        //        int id = 0;
        //        if (entity.ID_GRUPO == 0)
        //        {
        //            id = Factory.GetGrupoDao().save(entity);

        //        }
        //        else
        //        {
        //            entity.USR_ACTUALIZO = entity.USR_CREACION;
        //            Factory.GetGrupoDao().Modificar(entity);
        //            id = entity.ID_GRUPO;
        //        }
        //        this.GrabarAccesosGrupo(id, listOpciones);
        //        return id;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}


        //public void GrabarAccesosGrupo(int id, List<int> listOpciones)
        //{
        //    Factory.GetGrupoDao().Delete(new GRUPO() { ID_GRUPO = id });

        //    foreach (int idOpcion in listOpciones)
        //    {
        //        //GrupoOpcion entity = new GrupoOpcion();
        //        //entity.ID = new GrupoOpcion.GrupoOpcionID();
        //        //entity.ID.IdGrupo = id;
        //        //entity.ID.IdOpcion = idOpcion;

        //        Factory.GetGrupoDao().InsertarGrupoOpcion2(id, idOpcion);
        //    }
        //}

        /// <summary>
        /// Permite obtener las opciones de cada grupo
        /// </summary>
        /// <param name="idGrupo"></param>
        //public List<int> ObtenerOpcionesPorGrupo(int idGrupo)
        //{
        //    List<int> list = new List<int>();
        //    list = Factory.GetOpcionDao().ObtenerOpcionesPorGrupo(idGrupo);

        //    //foreach (OPCION item in listOpcion)
        //    //{
        //    //    list.Add(item.ID_OPCION);
        //    //}

        //    return list;
        //}


        /// <summary>
        /// Realiza una busqueda de usuarios
        /// </summary>
        /// <returns></returns>
        //public List<USUARIO> BuscarUsuarios(string nombre)
        //{
        //    return Factory.GetUsuarioDao().listarUser(nombre);
        //}

        /// <summary>
        /// Obtiene los datos de un usuario
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        //public USUARIO ObtenerUsuario(string userName)
        //{
        //    return Factory.GetUsuarioDao().listarUser(userName)[0];
        //}

        /// <summary>
        /// Valida si existe un usuario registrado con el mismo nombre de usuario
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        //protected bool ValidarExistenciaUsuario(string userName)
        //{
        //    USUARIO usuario = Factory.GetUsuarioDao().listarUser(userName)[0];
        //    if (usuario != null)
        //    {
        //        if (!string.IsNullOrEmpty(usuario.ID_USUARIO))
        //        {
        //            return true;
        //        }
        //    }
        //    return false;
        //}

        /// <summary>
        /// Elimina los datos de un usuario
        /// </summary>
        //public void EliminarUsuario(string userName, string idUsuario)
        //{
        //    try
        //    {
        //        //Usuario entity = Factory.GetUsuarioDao().GetById(userName);
        //        //entity.UsrActualizo = idUsuario;
        //        //entity.IndEstado = Estados.Eliminado;

        //        Factory.GetUsuarioDao().Eliminar(new USUARIO() { ID_USUARIO = idUsuario });

        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }

        //}


        /// <summary>
        /// Permite realizar el cambio de usuario
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="pwdOld"></param>
        /// <param name="pwdNew"></param>
        /// <returns></returns>
        //public string CambiarPasswordUsuario(string userName, string pwdOld, string pwdNew)
        //{
        //    try
        //    {
        //        USUARIO usuario = Factory.GetUsuarioDao().listarUser(userName)[0];

        //        if (pwdOld == Factory.GetUsuarioDao().DesEncriptarUser(usuario.DES_PASSWORD))
        //        {
        //            usuario.DES_PASSWORD = this.EncriptarPassword(pwdNew);
        //            Factory.GetUsuarioDao().Modificar(usuario);
        //            return ResultadoCambioPasssword.CambioOk;
        //        }
        //        else
        //        {
        //            return ResultadoCambioPasssword.PasswordNoCoincide;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}

        /// <summary>
        /// Permite recuperar el password del usuario
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        //public string RecuperarPassword(string email, out string password, out string nombre)
        //{
        //    try
        //    {
        //        password = null;
        //        nombre = null;
        //        if (!string.IsNullOrEmpty(email))
        //        {

        //            string id = "1";// Factory.GetUsuarioDao().ValidarEmail(email);
        //            if (!string.IsNullOrEmpty(id))
        //            {
        //                USUARIO usuario = Factory.GetUsuarioDao().listarUser(id)[0];

        //                if (usuario != null)
        //                {
        //                    password = Factory.GetUsuarioDao().DesEncriptarUser(usuario.DES_PASSWORD);
        //                    nombre = usuario.DES_NOMBRE + " " + usuario.DES_APELLIDOS;
        //                    return ResultadoRecuperarPwd.RecuperacionOK;
        //                }
        //                else
        //                {
        //                    return ResultadoRecuperarPwd.RecuperacionError;
        //                }
        //            }
        //            else
        //            {
        //                return ResultadoRecuperarPwd.EmailIncorrecto;
        //            }
        //        }
        //        else
        //        {
        //            return ResultadoRecuperarPwd.EmailRequerido;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}


        //protected void GrabarGruposUsuario(string username, List<int> listGrupo)
        //{
        //    Factory.GetUsuarioDao().Eliminar(new USUARIO() { ID_USUARIO = username });
        //    foreach (int id in listGrupo)
        //    {
        //        UsuarioGrupo entity = new UsuarioGrupo();
        //        entity.ID = new UsuarioGrupo.UsuarioGrupoID();

        //        entity.ID.IdGrupo = id;
        //        entity.ID.IdUsuario = username;

        //        Factory.GetUsuarioGrupoDao().Save(entity);
        //    }
        //}



        //public int ObtenerNroElementosPorNodo(int? idPadre)
        //{
        //    return Factory.GetOpcionDao().GetNroSubNodos(idPadre);
        //}

        

        /// <summary>
        /// Permite grabar un nuevo usuario
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="indNuevo"></param>
        /// <param name="listGrupos"></param>
    //    public bool GrabarUsuario(Usuario entity, bool indNuevo, List<int> listGrupos)
    //    {
    //        try
    //        {
    //            bool flag = true;
    //            if (indNuevo)
    //            {
    //                if (!this.ValidarExistenciaUsuario(entity.ID))
    //                {
    //                    Factory.GetUsuarioDao().Save(entity);
    //                    flag = true;
    //                }
    //                else
    //                {
    //                    flag = false;
    //                }
    //            }
    //            else
    //            {
    //                entity.UsrActualizo = entity.UsrCreacion;
    //                Factory.GetUsuarioDao().Update(entity);
    //                flag = true;
    //            }
    //            if (flag)
    //                this.GrabarGruposUsuario(entity.ID, listGrupos);


    //            //Actualizamos los datos de los correos de usuario y vendedores

    //            if (entity.IndUserPedido == ConstantesLogic.SI)
    //            {
    //                FactorySami factoria = null;


    //                string tipo = entity.IndTipoUserPedido;

    //                //if (tipo == TipoUsuarioPedido.Vendedor)
    //                //{
    //                //    factoria = new FactorySami(ParametroVenta.EmpresaSitio);

    //                //    if (!string.IsNullOrEmpty(entity.CodUsuarioVeh) && !string.IsNullOrEmpty(entity.DesEmailVehiculo))
    //                //    {
    //                //        factoria.GetUsuarioMaeDao().ActualizarEmailUsuario(entity.CodUsuarioVeh, entity.DesEmailVehiculo);
    //                //    }

    //                //if (!string.IsNullOrEmpty(entity.CodVendedorVeh) && !string.IsNullOrEmpty(entity.DesEmail))
    //                //{
    //                //    factoria.GetVendedorDao().ActualizarEmailVendedor(entity.CodVendedorVeh, entity.DesEmail);
    //                //}

    //                //if (!string.IsNullOrEmpty(entity.CodUsuarioVeh) && !string.IsNullOrEmpty(entity.CodVendedorVeh))
    //                //{
    //                //    factoria.GetVendedorDao().ActualizarFacturador(entity.CodVendedorVeh, entity.CodUsuarioVeh);
    //                //}                       

    //                //factoria = new FactorySami(ParametroVenta.EmpresaRepuestos);

    //                if (!string.IsNullOrEmpty(entity.CodUsuarioRep) && !string.IsNullOrEmpty(entity.DesEmailRepuesto))
    //                {
    //                    factoria.GetUsuarioMaeDao().ActualizarEmailUsuario(entity.CodUsuarioRep, entity.DesEmailRepuesto);
    //                }

    //                //if (!string.IsNullOrEmpty(entity.CodVendedorRep) && !string.IsNullOrEmpty(entity.DesEmail))
    //                //{
    //                //    factoria.GetVendedorDao().ActualizarEmailVendedor(entity.CodVendedorRep, entity.DesEmail);
    //                //}

    //                //if (!string.IsNullOrEmpty(entity.CodUsuarioRep) && !string.IsNullOrEmpty(entity.CodVendedorVeh))
    //                //{
    //                //    factoria.GetVendedorDao().ActualizarFacturador(entity.CodVendedorRep, entity.CodUsuarioRep);
    //                //}

    //                //}
    //                //if (tipo == TipoUsuarioPedido.Facturador)
    //                //{
    //                //    factoria = new FactorySami(ParametroVenta.EmpresaSitio);

    //                //    if (!string.IsNullOrEmpty(entity.CodUsuarioVeh) && !string.IsNullOrEmpty(entity.DesEmailVehiculo))
    //                //    {
    //                //        factoria.GetUsuarioMaeDao().ActualizarEmailUsuario(entity.CodUsuarioVeh, entity.DesEmailVehiculo);
    //                //    }


    //                //    factoria = new FactorySami(ParametroVenta.EmpresaRepuestos);

    //                //    if (!string.IsNullOrEmpty(entity.CodUsuarioRep) && !string.IsNullOrEmpty(entity.DesEmailRepuesto))
    //                //    {
    //                //        factoria.GetUsuarioMaeDao().ActualizarEmailUsuario(entity.CodUsuarioRep, entity.DesEmailRepuesto);
    //                //    }
    //                //}                   
    //                //    }

    //                //    return flag;
    //                //}
    //                //catch (Exception ex)
    //                //{
    //                //    throw new Exception(ex.Message, ex);
    //                //}        
    //            }
    //        }
        
    //}

        /// <summary>
        /// Graba los grupos a los cuales pertenece un usuario
        /// </summary>
        /// <param name="username"></param>
        /// <param name="listGrupo"></param>
        //protected void GrabarGruposUsuario(string username, List<int> listGrupo)
        //{
        //    Factory.GetUsuarioDao().Delete(username);
        //    foreach (int id in listGrupo)
        //    {
        //        UsuarioGrupo entity = new UsuarioGrupo();
        //        entity.ID = new UsuarioGrupo.UsuarioGrupoID();

        //        entity.ID.IdGrupo = id;
        //        entity.ID.IdUsuario = username;

        //        Factory.GetUsuarioGrupoDao().Save(entity);
        //    }
        //}

        /// <summary>
        /// Obtiene los nombres de agrupación de vendedores
        /// </summary>
        /// <returns></returns>
        //public List<TdVtaVendedor> ObtenerVendedores()
        //{
        //    return Factory.GetTdVtaVendedor().List();
        //}

        /// <summary>
        /// Permite obener el número de subnodos 
        /// </summary>
        /// <param name="idPadre"></param>
        ///// <returns></returns>
        //public int ObtenerNroElementosPorNodo(int? idPadre)
        //{
        //    return Factory.GetOpcionDao().GetNroSubNodos(idPadre);
        //}

        /// <summary>
        /// Permite registrar una estadística de uso de la aplicación
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        //public int RegistrarEstadistica(Estadistica entity)
        //{
        //    try
        //    {
        //        int id = Factory.GetEstadisticaDao().Save(entity);

        //        return id;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message, ex);
        //    }
        //}


        /// <summary>
        /// Lista las opciones del sistema
        /// </summary>
        /// <returns></returns>
        //public List<Opcion> ListarOpcionesEstadistica()
        //{
        //    return Factory.GetEstadisticaDao().GetByCriteria();
        //}

        /// <summary>
        /// Permite obtener las estadísticas de un grupo
        /// </summary>
        /// <param name="idOpcion"></param>
        /// <returns></returns>
        //public List<Estadistica> ObtenerEstadistica(int idOpcion)
        //{
        //    return Factory.GetEstadisticaDao().GetByCriteria(idOpcion);
        //}
        
}


